package com.itheima.threadpool_demo;

import java.util.concurrent.*;

/*
    ThreadPoolExecutor类 : Java提供好的类

            public ThreadPoolExecutor(
                                int corePoolSize,                       核心线程数量
                                int maximumPoolSize,                    最大线程数量
                                long keepAliveTime,                     线程临时存活时间
                                TimeUnit unit,                          线程临时存活时间单位
                                BlockingQueue<Runnable> workQueue,      阻塞队列
                                ThreadFactory threadFactory,            创建线程方式
                                RejectedExecutionHandler handler)       任务的拒绝策略

            核心线程数量 : 3       核心线程数量为3
            最大线程数量 : 10      线程中最多线程数量为10
            线程临时存活时间 :   60             临时线程多长时间没有任务销毁线程的时间
            线程临时存活时间单位 : 分钟|秒|消失
            阻塞队列 :  长度10    集合
            创建线程方式 ;
            任务的拒绝策略 : 可选

            饭馆 : 服务员   长期工3   临时工7
 */
public class Test3 {
    public static void main(String[] args) {
        // 使用Java提供好的线程池
        // Executors.newFixedThreadPool(10);

        ThreadPoolExecutor pool = new ThreadPoolExecutor(
                3,            // 核心线程数量 : 3
                10,      //  最大线程数量 : 10
                60,         // 线程临时存活时间 :   60
                TimeUnit.SECONDS,         // 线程临时存活时间单位 : 分钟|秒|消失
                new ArrayBlockingQueue<>(10),// 阻塞队列
                Executors.defaultThreadFactory(),// 创建线程方式
                new ThreadPoolExecutor.AbortPolicy() // 任务拒绝策略
        );

        for (int i = 0; i < 30; i++) {
            pool.submit(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < 10; i++) {
                        System.out.println(i);
                    }
                }
            });
        }
    }
}
